/*
 * # 应用初始化代码:
 *  Authority - 组织与用户
 * 
 * # 描述:
 *  为应用提供组织、工作岗位、用户的管理功能，以及针对组织、部门、岗位和用户的权限分派和验证功能，同时提供用户登录、注销、导航等基础功能。
 * 
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

use "pittypat_app";
go

-- 注册应用：组织与用户
exec "waln_authority"."reg_app"
	'11E628A0-5909-4EC7-8836-A45E60DCC700', -- Id
	'Waln', -- 开发者代码
	N'上海沃恩信息科技有限公司', -- 开发者名称
	'Authority', -- App 标识符
	N'组织与用户', -- App 名称
	'3.0.5.0', -- App 版本号
	5, -- 模块数目
	N'为 Pittypat App 提供组织、工作岗位、用户的管理功能以及权限验证功能。',  -- 描述
	null; -- 位置，传递 null 自动使用最大值 + 1
go

-- 模块：身份验证与导航
exec "waln_authority"."reg_module"
	'11E628C9-C5D9-5C9E-8836-A45E60DCC700', -- Id
	'11E628A0-5909-4EC7-8836-A45E60DCC700', -- 隶属 App 的 Id
	0, -- 位置
	'Authentication', -- 标识符
	N'身份验证与导航', -- 模块名称
	0, -- 呈现方式：0-不公开，1-UI，2-服务
	0, -- 是否允许匿名访问
	N'提供对用户登录、注销、身份的验证和用户信息查询等功能。';  -- 描述
go

-- 模块：组织管理
exec "waln_authority"."reg_module"
	'11E628C8-4A88-196C-8836-A45E60DCC700', -- Id
	'11E628A0-5909-4EC7-8836-A45E60DCC700', -- 隶属 App 的 Id
	1, -- 位置
	'Organization', -- 标识符
	N'组织管理', -- 模块名称
	1, -- 呈现方式：0-不公开，1-UI，2-服务
	0, -- 是否允许匿名访问
	N'向系统管理人员提供组织结构、部门以及岗位的管理功能，包括为组织、部门或岗位添加用户，以及设置组织、部门或岗位的权限。';  -- 描述
go

-- 模块：用户管理
exec "waln_authority"."reg_module"
	'11E628C8-B2D5-4133-8836-A45E60DCC700', -- Id
	'11E628A0-5909-4EC7-8836-A45E60DCC700', -- 隶属 App 的 Id
	2, -- 位置
	'Users', -- 标识符
	N'用户管理', -- 模块名称
	1, -- 呈现方式：0-不公开，1-UI，2-服务
	0, -- 是否允许匿名访问
	N'向系统管理人员提供用户的管理功能，包括为用户设置权限。';  -- 描述
go

-- 模块：应用与功能
exec "waln_authority"."reg_module"
	'11E63545-EEDE-70E2-A936-A45E60DCC700', -- Id
	'11E628A0-5909-4EC7-8836-A45E60DCC700', -- 隶属 App 的 Id
	3, -- 位置
	'Apps', -- 标识符
	N'应用与功能', -- 模块名称
	1, -- 呈现方式：0-不公开，1-UI，2-服务
	0, -- 是否允许匿名访问
	N'向系统管理员提供 App 的管理功能。';  -- 描述
go

-- 模块：用户资料
exec "waln_authority"."reg_module"
	'11E63583-FEC6-0AF0-A936-A45E60DCC700', -- Id
	'11E628A0-5909-4EC7-8836-A45E60DCC700', -- 隶属 App 的 Id
	4, -- 位置
	'Profile', -- 标识符
	N'用户资料', -- 模块名称
	1, -- 呈现方式：0-不公开，1-UI，2-服务
	0, -- 是否允许匿名访问
	N'向每一位用户提供用户资料修改、密码设置、头像更改等功能。';  -- 描述
go

-- 当前时间
declare @now datetime2 = sysdatetime();
-- 当前日期
declare @today date = cast(@now as date);
-- 根组织的 Id
declare @orgId uniqueidentifier = newid();
-- 信息部的 Id
declare @itDeptId uniqueidentifier = newid();
-- 系统管理员岗位的 Id
declare @adminPostId uniqueidentifier = newid();
-- 系统管理员用户的 Id
declare @adminUserId uniqueidentifier = newid();

-- 默认的根组织
insert into "waln_authority"."depts" 
(
	"Id", -- Id 
	"Level", -- 层级 
	"ParentId", -- 上级部门的 Id 
	"OrgId", -- 根组织的 Id 
	"Name", -- 名称 
	"Description", -- 描述 
	"CreateDate"  -- 设立日期 
)
values
(
	@orgId, -- Id 
	0, -- 层级 
	null, -- 上级部门的 Id 
	@orgId, -- 根组织的 Id 
	N'根组织', -- 名称 
	null, -- 描述 
	@today  -- 设立日期 
);

-- 信息部
insert into "waln_authority"."depts" 
(
	"Id", -- Id 
	"Level", -- 层级 
	"ParentId", -- 上级部门的 Id 
	"OrgId", -- 根组织的 Id 
	"Name", -- 名称 
	"Description", -- 描述 
	"CreateDate"  -- 设立日期 
)
values
(
	@itDeptId, -- Id 
	1, -- 层级 
	@orgId, -- 上级部门的 Id 
	@orgId, -- 根组织的 Id 
	N'信息部', -- 名称 
	null, -- 描述 
	@today  -- 设立日期 
);

-- 系统管理员岗位
insert into "waln_authority"."posts" 
(
	"Id", -- Id 
	"DeptId", -- 隶属部门的 Id 
	"Name", -- 岗位名称 
	"Description", -- 描述 
	"CreateDate"  -- 设立日期 
)
values
(
	@adminPostId, -- Id 
	@itDeptId, -- 隶属部门的 Id 
	N'系统管理员', -- 岗位名称 
	null, -- 描述 
	@today  -- 设立日期 
);

-- 默认的系统管理账户
insert into "waln_authority"."users" 
(
	"Id", -- Id 
	"LoginName", -- 登录名称 
	"Password", -- 登录密码密文 
	"No", -- 编号 
	"Name", -- 用户名称 
	"FaceUrl", -- 头像路径 
	"Mobile", -- 手机号码 
	"Email", -- 电子邮件地址 
	"CreateTime", -- 创建时间 
	"LockTime", -- 锁定时间 
	"LoginTime", -- 登录时间 
	"Token", -- 用户令牌 
	"TokenExpireTime"  -- 令牌有效期 
)
values
(
	@adminUserId, -- Id 
	'admin', -- 登录名称 
	"waln_authority"."encrypt_password"('999999'), -- 登录密码密文 
	null, -- 编号 
	N'系统管理员', -- 用户名称 
	null, -- 头像路径 
	null, -- 手机号码 
	null, -- 电子邮件地址 
	@now, -- 创建时间 
	null, -- 锁定时间 
	null, -- 登录时间 
	null, -- 用户令牌 
	null  -- 令牌有效期 
);

-- 系统管理员的岗位
insert into "waln_authority"."userposts" 
(
	"UserId", -- 用户的 Id 
	"PostId", -- 工作岗位的 Id 
	"DeptId", -- 隶属部门的 Id 
	"OrgId", -- 根组织的 Id 
	"CreateTime", -- 分配时间 
	"Description"  -- 描述 
)
values
(
	@adminUserId, -- 用户的 Id 
	@adminPostId, -- 工作岗位的 Id 
	@itDeptId, -- 隶属部门的 Id 
	@orgId, -- 根组织的 Id 
	@now, -- 分配时间 
	null  -- 描述 
);

-- 系统管理员岗位的权限
-- 组织管理
insert into "waln_authority"."permissions" 
(
	"ModuleId", -- 模块的 Id 
	"RoleId", -- 权利对象的 Id 
	"RoleType", -- 权利人类型代码 
	"GrantTime", -- 授权时间 
	"ExpireTime"  -- 有效截止时间 
)
values
(
	'11E628C8-4A88-196C-8836-A45E60DCC700', -- 模块的 Id 
	@adminPostId, -- 权利对象的 Id 
	3, -- 权利人类型代码 
	@now, -- 授权时间 
	null  -- 有效截止时间 
);

-- 用户管理
insert into "waln_authority"."permissions" 
(
	"ModuleId", -- 模块的 Id 
	"RoleId", -- 权利对象的 Id 
	"RoleType", -- 权利人类型代码 
	"GrantTime", -- 授权时间 
	"ExpireTime"  -- 有效截止时间 
)
values
(
	'11E628C8-B2D5-4133-8836-A45E60DCC700', -- 模块的 Id 
	@adminPostId, -- 权利对象的 Id 
	3, -- 权利人类型代码 
	@now, -- 授权时间 
	null  -- 有效截止时间 
);

-- 应用与功能
insert into "waln_authority"."permissions" 
(
	"ModuleId", -- 模块的 Id 
	"RoleId", -- 权利对象的 Id 
	"RoleType", -- 权利人类型代码 
	"GrantTime", -- 授权时间 
	"ExpireTime"  -- 有效截止时间 
)
values
(
	'11E63545-EEDE-70E2-A936-A45E60DCC700', -- 模块的 Id 
	@adminPostId, -- 权利对象的 Id 
	3, -- 权利人类型代码 
	@now, -- 授权时间 
	null  -- 有效截止时间 
);
go
